package com.wanlian.service;

import com.wanlian.common.PageCondition;
import com.wanlian.entity.Device;
import com.wanlian.entity.DeviceConfig;
import com.wanlian.entity.ScoreHistory;
import com.wanlian.entity.Storage;
import com.wanlian.model.ResultModel;
import com.wanlian.netty.msg.Device.model.Disk;
import com.wanlian.vo.DeviceListVo;
import com.wanlian.vo.DeviceUpGradeVo;
import com.wanlian.vo.Page;

import java.util.List;
import java.util.Map;

public interface DeviceServices {
    /**
     * 添加
     *
     * @param device
     * @return
     */
    ResultModel doAdd(Device device);
    /**
     * 添加
     *
     * @param devices
     * @return
     */
    ResultModel doAdd(List<Device> devices);


    ResultModel doUpd(List<Device> devices);

    /**
     * @param device
     * @return
     */
    ResultModel doedit(Device device);

    /**
     * 通过页码和条件查询
     *
     * @param pageCondition
     * @return
     */
    ResultModel queryDevice(PageCondition pageCondition,int userId);

    /**
     * 查询用户设备
     * @param page
     * @param userId
     * @return
     */
    ResultModel queryDeviceByUser(Page page, int userId);

    /**
     * 查询用户设备
     * @param userId
     * @return
     */
    List<Device> queryDevicesByUser(int userId);

    /**
     * 查询所有在线设备
     * @return
     */
    List<Device> queryDevicesOnline();


//    /**
//     * 查询设备积分
//     *
//     * @param page
//     * @param conditions
//     * @return
//     */
//    ResultModel queryDeviceScore(Page page, Map<String, Object> conditions);

    /**
     * 获取用户积分
     *
     * @param userId
     * @return
     */
    ResultModel queryUserScoreByUserId(int userId);

    /**
     * 获取积分记录
     *
     * @param page
     * @param deviceId
     * @return
     */
    ResultModel queryScoreHistoryByDeviceId(Page page, int deviceId);

    /**
     * 删除设备
     *
     * @param deviceId
     * @return
     */
    ResultModel doDeleteById(int deviceId);

    /**
     * 通过设备
     *
     * @param deviceId
     * @return
     */
    ResultModel doDeleteByDeviceId(String deviceId);

    ResultModel bindDeviceById(int deviceId, int userId);

    ResultModel doBindDeviceByDeviceKey(String deviceKey, int userId);

    /**
     * 通过设备编号查询
     *
     * @param deviceId
     * @return
     */
    Device queryByDeviceId(String deviceId);

    /**
     * 通过mac地址查询
     *
     * @param mac
     * @return
     */
    Device queryByMac(String mac);
    Device queryByDeviceKey(String deviceKey);


    /**


    /**
     * 获取设备昨日的积分历史
     *
     * @param page
     * @param deviceId
     * @return
     */
    ResultModel queryHistoryYestoryDayByDeviceId(Page page, int deviceId);


    /**
     * 启动设备
     *
     * @param id
     * @return
     */
    ResultModel doEnableById(int id);

    /**
     * 启用设备
     *
     * @param deviceId
     * @return
     */
    ResultModel doEnableByDeviceId(String deviceId);


    /**
     * 添加设备配置
     *
     * @param config
     * @return
     */
    ResultModel doAddDeviceConfig(DeviceConfig config);

    /**
     * 修改设备配置
     *
     * @param config
     * @return
     */
    ResultModel doEditDeviceConfig(DeviceConfig config,int userId);

    ResultModel doEditDeviceConfigCall(DeviceConfig config,int userId);


    /**
     * 通过device 查看设备信息
     *
     * @param device
     * @return
     */
    ResultModel queryDeviceInfo(Device device);

    ResultModel queryDeviceInfoApp(int userId);

    /**
     * 解绑设备
     *
     * @param device
     * @return
     */
    ResultModel doEditDevice(Device device, int userId);


    ResultModel queryUserDeviceCount(int userId);


    ResultModel queryDeviceScoreHistoryByParam(PageCondition pageCondition,int userId);

    /**
     * 根据用户ID查询该用户当前使用的设备
     * @param userId
     * @return
     */
    Device queryDeviceByUserId(int userId);

    ResultModel doSetDeviceCurrent(String deviceId,int userid);

    /**
     * 获取设置界面加载信息
     *
     * @param userId
     * @return
     */
    ResultModel queryConfigInfo(int userId);

    /**
     * 修改设备共享内存配置
     *
     * @param
     * @return
     */
    ResultModel doEditDeviceMemoryConfig(Storage storage, int userId);

    /**
     * 获取设备共享内存配置
     *
     * @param
     * @return
     */
    ResultModel queryDeviceMemoryConfig(int userId);

    DeviceConfig queryDeviceConfig(int userId);

    ResultModel doEditOnline(Device device);
    ResultModel editOnlineBatch(List<Device> devices);

    ResultModel doEditStorage(Disk disk);

    ResultModel editOfflineAll();




}
